//
//  JonesSingle.m
//  HCFrame
//
//  Created by 丁 一 on 2018/5/30.
//  Copyright © 2018年 丁 一. All rights reserved.
//

#import "JonesSingle.h"

static JonesSingle *instance = nil;

@implementation JonesSingle

+ (JonesSingle *)instance{
    @synchronized(self){  //为了确保多线程情况下，仍然确保实体的唯一性
        if (!instance) {
            instance= [[self alloc] init]; //该方法会调用 allocWithZone
        }
    }
    return instance;
}

+(id)allocWithZone:(NSZone *)zone{
    @synchronized(self){// //为了确保多线程情况下，仍然确保实体的唯一性
        if (!instance) {
            instance = [super allocWithZone:zone]; //确保使用同一块内存地址
            return instance;
        }
    }
    return nil;
}

-(id)init
{
    if(instance){
        return instance;
    }
    if(self = [super init]){
        //进行一些初始化
    }
    return self ;
}
- (id)copyWithZone:(NSZone *)zone;{
    return self; //确保copy对象也是唯一
}

-(id)retain{
    return self; //确保计数唯一
}

- (unsigned)retainCount
{
    return UINT_MAX;  //装逼用的，这样打印出来的计数永远为-1
}

- (id)autorelease
{
    return self;//确保计数唯一
}

- (oneway void)release
{
    //重写计数释放方法 do nothing
}


@end
